/*- * See the file LICENSE for redistribution information. * * Copyright (c) 2002-2006 * Sleepycat Software. All rights reserved. * * $Id: BINReference.java,v 1.1 2006/05/06 09:00:19 ckaestne Exp $ */ package com.sleepycat.je.tree; import java.util.HashSet; import java.util.Iterator; import java.util.Set; import com.sleepycat.je.dbi.DatabaseId; /** * A class that embodies a reference to a BIN that does not rely on a * Java reference to the actual BIN. */ public class BINReference { protected byte[] idKey; private long nodeId; private DatabaseId databaseId; private Set deletedKeys; // Set of Key objects BINReference(long nodeId, DatabaseId databaseId, byte[] idKey) { this.nodeId = nodeId; this.databaseId = databaseId; this.idKey = idKey; } public long getNodeId() { return nodeId; } public DatabaseId getDatabaseId() { return databaseId; } public byte[] getKey() { return idKey; } public byte[] getData() { return null; } public void addDeletedKey(Key key) { if (deletedKeys == null) { deletedKeys = new HashSet(); } deletedKeys.add(key); } public void addDeletedKeys(BINReference other) { if (deletedKeys == null) { deletedKeys = new HashSet(); } if (other.deletedKeys != null) { deletedKeys.addAll(other.deletedKeys); } } public void removeDeletedKey(Key key) { if (deletedKeys != null) { deletedKeys.remove(key); if (deletedKeys.size() == 0) { deletedKeys = null; } } } public boolean hasDeletedKey(Key key) { return (deletedKeys != null) && deletedKeys.contains(key); } public boolean deletedKeysExist() { return ((deletedKeys != null) && (deletedKeys.size() > 0)); } public Iterator getDeletedKeyIterator() { if (deletedKeys != null) { return deletedKeys.iterator(); } else { return null; } } /** * Compare two BINReferences. */ public boolean equals(Object obj) { if (this == obj) { return true; } if (!(obj instanceof BINReference)) { return false; } return ((BINReference) obj).nodeId == nodeId; } public int hashCode() { return (int) nodeId; } public String toString() { return "idKey=" + Key.getNoFormatString(idKey) + " nodeId = " + nodeId + " db=" + databaseId + " deletedKeys=" + deletedKeys; } }